<?php
/**
* 利用goolge翻译获取单个字符或者短句的语音
* 支持英文单个字符或句子和中文单个字或句子
* 可以直接输出，或保存为文件
* @example
* <pre>
*	//直接输出到浏览器
*   $t = new WordToTts();
*   header("Content-Type: audio/mpeg");
*   echo $t->getTTS('你', 'zh');
*   //保存为文件
*	$t = new WordToTts();
*   $t->getTTS2File("你是谁", 'zh');
* </pre>
*/
class WordToTts {
	/**
	* 获取tts语音的google地址
	* @var string
	* @access private
	*/
	private $url = 'http://translate.google.cn/translate_tts?ie=UTF-8';
	
	/**
	* 支持的语言
	* @var array
	* @access private
	*/
	private $language = array(
							'en' => 'en',
							'zh' => 'zh-CN'
						);
	
	/**
	* 需要获取语音单字或者句子
	* @var string
	* @access private
	*/
	private $word;
	
	/**
	* 获取到的tts语音数据
	* @var string
	* @access private
	*/
	private $tts;
	
	/**
	* 获取tts语音
	* @access public
	* @param  string  $word      需要获取语音的单字或者句子
	* @param  string  $language  输入单字或者句子的语言
	* @return mixed   成功会返回语音数据，失败返回false
	*/
	public function getTTS($word, $language) {
		if(! array_key_exists($language, $this->language))  {
			return false;
		}
		$this->genUrl($word, $language);
		if(! $this->curlGet()) {
			return false;
		}
		return $this->tts;		
	}
	
	/**
	* 获取tts语音，并保存为mp3格式的文件
	* 默认的存储路径是当前目录的tts目录下，文件名是源输入字符串的md5值
	* @param  string  $word      需要获取语音的单字或者句子
	* @param  string  $language  输入单字或者句子的语言
	* @return mixed   成功会返回语true，失败返回false
	*/
	public function getTTS2File($word, $language) {
		if(! array_key_exists($language, $this->language)) {
			return false;
		}
		$this->genUrl($word, $language);
		if(! $this->curlGet()) {
			echo curl_error();
			return false;
		}
		$file_name = md5($word) . '.mp3';
		if(! is_dir('tts')) {
			mkdir('tts');
		}
		file_put_contents('tts/' . $file_name, $this->tts);
		return true;
	}
	
	/**
	* 取得获取tts语音的完整地址
	* @param  string  $word
	* @param  string  $language
	* @return boolean
	*/
	private function genUrl($word, $language) {
		$this->word = urlencode($word);
		$this->url .= '&q=' . $this->word;
		$this->url .= '&tl=' . $this->language[$language];
		return true;
	}
	
	/**
	* 用curl获取tts数据
	* @return boolean
	*/
	public function curlGet() {
		$opts = array(
					CURLOPT_URL            => $this->url,
					CURLOPT_RETURNTRANSFER => true,
					CURLOPT_TIMEOUT        => 20,
					CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0'
				);
		$ch = curl_init();
		curl_setopt_array($ch, $opts);
		$this->tts = curl_exec($ch);
		if(! $this->tts) {
			return false;
		}
		curl_close($ch);
		return true;
	}
}